package util

// ArrayField 二维数组中，每个数组中的field字段，返回一维数组
func ArrayField(data *[]map[string]interface{}, field string) *[]interface{} {
	arr := make([]interface{}, 0)
	for _, val := range *data {
		if val[field] != nil {
			arr = append(arr, val[field])
		}
	}
	return &arr
}

// ArrayColumnByInt64 从二维数组中取出 field 列，用相应的 "field" 列作为键值：
func ArrayColumnByInt64(data *[]map[string]interface{}, field string) map[int64]map[string]interface{} {
	arr := make(map[int64]map[string]interface{}, 0)
	for _, val := range *data {
		if val[field] != nil {
			arr[val[field].(int64)] = val
		}
	}
	return arr
}

// ArrayColumnByString 从二维数组中取出 field 列，用相应的 "field" 列作为键值：
func ArrayColumnByString(data *[]map[string]interface{}, field string) map[string]map[string]interface{} {
	arr := make(map[string]map[string]interface{}, 0)
	for _, val := range *data {
		arr[val[field].(string)] = val
	}
	return arr
}

// ArrayColumnGroupByInt64 从二维数组中取出 field 列，用相应的 "field" 列作为键值，有重复的放到同一个切片里：
func ArrayColumnGroupByInt64(data *[]map[string]interface{}, field string) map[int64][]map[string]interface{} {
	arr := make(map[int64][]map[string]interface{}, 0)
	for _, val := range *data {
		arr[val[field].(int64)] = append(arr[val[field].(int64)], val)
	}
	return arr
}

// ArrayColumnByFloat64 从二维数组中取出 field 列，用相应的 "field" 列作为键值：
func ArrayColumnByFloat64(data *[]map[string]interface{}, field string) map[float64]map[string]interface{} {
	arr := make(map[float64]map[string]interface{}, 0)
	for _, val := range *data {
		arr[val[field].(float64)] = val
	}
	return arr
}
